package com.atwulidun.command13;
// 遥控器上有十一个按钮，第一行对应点灯的开关，第二行对应电视的开关，后面三行对应其他三种电器的开关，最后一个是撤销
public class RemoteController {
    // 定义一个存储所有电器”开“按钮对应的命令对象的数组
    private Command[] onCommands;
    // 定义一个存储所有电器”关“按钮对应的命令对象的数组
    private Command[] offCommands;
    // 定义一个变量来存储上一次的命令，以便对该命令进行撤销
    private Command previousCommand;

    public RemoteController() {
        onCommands = new Command[5];
        offCommands = new Command[5];
        // 对所有的开关按钮进行初始化为空命令
        for (int i = 0; i < 5; i++) {
            onCommands[i] = new DefaultCommand();
            offCommands[i] = new DefaultCommand();
        }
    }

    // 对某一行的开关按钮设置具体命令的方法
    public void setCommands(int row, Command onCommand, Command offCommand) {
        onCommands[row] = onCommand;
        offCommands[row] = offCommand;;
    }

    // 按下某一行的“开“按钮后执行命令
    public void onButtonIsPushed(int row) {
        // 执行该“开”按钮对应的命令
        onCommands[row].execute();
        // 把该“开”按钮对应的命令记录下来以便后面撤销命令
        previousCommand = onCommands[row];
    }

    // 按下某一行的“关“按钮后执行命令
    public void offButtonIsPushed(int row) {
        // 执行该“关”按钮对应的命令
        offCommands[row].execute();
        // 把该“关”按钮对应的命令记录下来以便后面撤销命令
        previousCommand = offCommands[row];
    }

    // 对上一次执行的命令进行撤销
    public void undo() {
        previousCommand.undo();
    }
}
